import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;

/**
 * @author Tiina, Chris, Lauri
 *
 * Luokka, joka lukee Webistä tulevat lennot.
 */
public class WebLukija {
	private int aloitusRivi;
	private ArrayList<Lento> lennot;
	private ExcelReader excel;

	
	public WebLukija() {
		super();
		lennot = new ArrayList<Lento>();
		aloitusRivi = 100;
		this.excel = new ExcelReader(); //Luodaan Excel-lukija
		this.etsiLento();
	}

	/*Rivin käsittelymetodi*/
	private ArrayList<String> tokenize(String rivi) {
		StringTokenizer token = new StringTokenizer(rivi, "<>"); //Paloitellaan rivi token:iin
		ArrayList<String> palat = new ArrayList<String>();
		while (token.hasMoreTokens()) {
			palat.add(token.nextToken());
		} //Paloiteltu rivi löytyy palat-ArrayListista
		return palat;
	}

	/*Etsitään lento Internetistä.*/
	public void etsiLento() {

		System.out.println("Fetching flight schedules for Helsinki-Vantaa airport. This may take a while...");
		Web web = new Web("http://m.helsinki-vantaa.fi/mobiili-lahtevat");
		ArrayList<String> websivu = web.annaSivu();
		HashMap<String, Boolean> lisatytKaupungit = new HashMap<String, Boolean>();
		
		for (int i = this.aloitusRivi; i < websivu.size(); i++ ) {
			String rivi = websivu.get(i);
			
			if (rivi.startsWith("        <td class=\"flight\">")) { //Todetaan, että tällä rivillä on lento
				ArrayList<String> palat = this.tokenize(rivi); //Paloitellaan rivi mieluisaksi				
				String kaupunki = palat.get(3); //Määränpää				
				ArrayList<String> palatEdellinen = this.tokenize(websivu.get(i-1)); //Haetaan edellinen rivi
				String kello = palatEdellinen.get(3); //Lähtöaika
				Lento asdf = new Lento(kaupunki, kello, excel); //Luodaan uusi Lento-olio
				
				if (lisatytKaupungit.get(kaupunki) == null) {
					//Jos kaupunkia ei ole lisätty HashMapiin, kerrotaan että hän on ainut laatuaan.
					asdf.setSpecial();
					lisatytKaupungit.put(kaupunki, true);
				}
				if (asdf.kaikkiOk()) {
					lennot.add(asdf); //Lisätään uusi lento ArrayListiin		
				}
			}		
		}
	}

	/*Palautetaan ArrayListina lennot, jotka Internetistä on löydetty.*/
	public ArrayList<Lento> annaAikataulu() {
		return this.lennot;
	}

	public static void main(String args[]) {

		WebLukija kissa = new WebLukija(); //Näin luodaan uusi weblukija
		ArrayList<Lento> t;
		t = kissa.annaAikataulu(); //Pyydetään Weblukijalta ArrayList<Lento> lennoista
		for (int i = 0; i < t.size(); i++) {
			System.out.println(t.get(i));
		}
	}
	
	public ExcelReader giveExcel() {
		return this.excel;
	}
}